package com.itcam.socket_.tcp_;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * Author:Cammy.Wu
 * Date:2024-05-15
 * Description:多线程处理用户请求————服务器
 */

public class ServerDemo05 {
    public static void main(String[] args) {
        System.out.println("服务器启动了...");
        // 1.创建套接字：指定服务器的端口号
        ServerSocket serverSocket = null;
        Socket socket = null; // 阻塞方法：等待接受客户端的数据，什么时候接收到数据，什么时候程序继续向下执行

        int count = 0;//定义一个计数器

        try {
            serverSocket = new ServerSocket(8888);
            // 2.等待客户端发来的信息
            while (true) { // 加入死循环，服务器一直监听客户端是否发送请求
                socket = serverSocket.accept();
                // 每次过来的客户端请求靠线程处理
                new ServerThread(socket).start();
                count++;
                System.out.println("当前是第" + count + "个客户端访问了服务器...");
                System.out.println("对应的客户端是："+socket.getInetAddress());
            }
            // accpet()返回一个Socket，这个Socket其实就是客户端的Socket
            // 接收到这个Socket以后，客户端和服务器才真正产生了链接，才真正可以通信了

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (socket != null) {
                    socket.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

            try {
                if (serverSocket != null) {
                    serverSocket.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}
